libxc: Only retry mapping pages when ENOENT is returned
authorAndres Lagar-Cavilla <andres@lagarcavilla.org>
Tue, 10 Jan 2012 15:35:01 +0000 (15:35 +0000)
committerAndres Lagar-Cavilla <andres@lagarcavilla.org>
Tue, 10 Jan 2012 15:35:01 +0000 (15:35 +0000)
If the return value from the ioctl() is not ENOENT, it's possible that err[i]
will not be updated and libxc will just loop forever.  Although it's unlikely
that err[i] would not be updated after the ioctl() gets through at least once,
it's better to be defensive.

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxc/xc_linux_osdep.c

index 115203ddb419896fff3d4cd2b2f60e28b8da2632..319997947e15933ddee972f37fe78711140fc347 100644 (file)
@@ -232,7 +232,7 @@ static void *linux_privcmd_map_foreign_bulk(xc_interface *xch, xc_osdep_handle h
             do {
                 usleep(100);
                 rc = ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH_V2, &ioctlx);
-            } while ( rc < 0 && err[i] == -ENOENT );
+            } while ( rc < 0 && errno == ENOENT && err[i] == -ENOENT );
         }
     }